package main

import "flag"
import "fmt"
import "os"

// nzpJVM运行时的命令行参数解析器
type Cmd struct {
	helpFlag    bool
	versionFlag bool
	cpOption    string
	class       string
	XjreOption  string
	args        []string
}

// 解析命令行参数
func parseCmd() *Cmd {
	// 新建一个Cmd结构体，内容全部为默认值
	cmd := &Cmd{}
	// 参数不合法时输出提示
	flag.Usage = printUsage
	// 将此结构体中的内容和flag做绑定
	// 如果命令行有help参数，则cmd中helpFlag为true
	flag.BoolVar(&cmd.helpFlag, "help", false, "print help message")
	flag.BoolVar(&cmd.helpFlag, "?", false, "print help message")
	flag.BoolVar(&cmd.versionFlag, "version", false, "print version and exit")
	flag.StringVar(&cmd.cpOption, "classpath", "", "classpath")
	flag.StringVar(&cmd.cpOption, "cp", "", "cp")
	flag.StringVar(&cmd.XjreOption, "Xjre", "", "path to jre")
	// 解析命令行参数，封装到Cmd中
	flag.Parse()

	// 解析完成后，还有上面未绑定的字段，可能是类名和传入的参数名称
	args := flag.Args()
	if len(args) > 0 {
		cmd.class = args[0]
		cmd.args = args[1:]
	}
	// 返回此结构
	return cmd
}

// 参数不合法时或者参数为-help时输出提示
func printUsage() {
	fmt.Printf("Usage: %s [-options] class [args...]\n", os.Args[0])
}
